import Vue from "vue";
import VueRouter from "vue-router";

Vue.use(VueRouter);

// 导入路由模块化文件
import filmsRoutes from "./modules/films";
import cinemasRoutes from "./modules/cinemas";
import infosRoutes from "./modules/infos";
import ucenterRoutes from "./modules/ucenter";
import Login from "@/views/ucenter/Login";
import Balence from "@/views/ucenter/Balence";
import Vuex from "@/views/Vuex";
import Vuex1 from "@/views/Vuex1";
// 导入城市组件
import City from "@/views/city/Index.vue";

const routes = [
    // 路由重定向（“/”→“/films/nowPlaying”）
    {
        path: "/",
        redirect: "/films/nowPlaying",
    },
    // 城市选择列表
    {
        path: "/city",
        component: City,
    },
    // vuex的测试组件
    {
        path: "/vuex",
        component: Vuex,
    },
    {
        path: "/vuex1",
        component: Vuex1,
    },
    // 登录路由
    {
        path: "/login",
        component: Login,
    },
    // 钱包路由
    {
        path: "/my_wallet",
        component: Balence,
    },
    // 电影模块的路由文件
    ...filmsRoutes,
    // 影院模块的路由文件
    ...cinemasRoutes,
    // 资讯模块的路由文件
    ...infosRoutes,
    // 我的模块的路由文件
    ...ucenterRoutes,
    // {
    //     path: "/about",
    //     name: "About",
    //     component: () => import(/* webpackChunkName: "about" */ "../views/About.vue"),
    // },
];

const router = new VueRouter({
    mode: "history",
    base: process.env.BASE_URL,
    routes,
});

// 解决翻墙的问题
router.beforeEach((to, from, next) => {
    // to：要去的路由的对象信息
    // from：来的路由对应的对象信息
    // next：其是一个方法，有点nodejs中间件的next含义（在处理完之后需要执行next）

    // 思路：一般情况下，项目经理会告诉我们一个列表（ACL，Access Control List），这个列表列出了哪些地址需要登录/不需要登录，需要获取用户需要去往的地址，与列表的地址一一比对，如果命中则判断是否有令牌，如果有则进行下一步操作，否则去往登录页面
    const acl = ["/my_wallet", "/settings", "/orders"];
    // 要去的地址
    const goPath = to.path;
    // 匹配是否命中
    if (acl.includes(goPath)) {
        // 当前访问的地址需要登录
        const jwt = localStorage.getItem("token");
        if (jwt) {
            next();
        } else {
            // 说明当前用户没有登录，带上要去的地址，以便回调
            router.push("/login?goto=" + goPath);
            // next({path: "/login"})
        }
    } else {
        next();
    }
});

// 后置全局守卫
// router.afterEach((to,from) => {

// })

export default router;
